home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
101-125
/
disk_107
/
prosuite
/
fileio
/
strings.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
4KB
|
208 lines
/* *** strings.c ************************************************************
*
* String Manipulation Routines
*
* Copyright (C) 1986, 1987, Robert J. Mical
*
* CONFIDENTIAL and PROPRIETARY
*
* HISTORY NAME DESCRIPTION
* ----------- -------------- --------------------------------------------
* 4 Feb 87 RJ Real release
* 2 Feb 87 RJ Added StripOuterSpace()
* 16 May 86 RJ Just more stuff
* 1 June 1985 =RJ Mical= Created this file from a weird distant echo.
*
* *********************************************************************** */
#include "exec/types.h"
#define FOREVER for(;;)
/* copy these and define them as 'extern' in your global include file
* in order to use these routines in your code.
*/
SHORT CompareUpperStrings();
UBYTE *FindSuffix();
SHORT GetAtom();
SHORT IndexString();
SHORT StringLength();
BOOL StringsEqual();
UBYTE *StripLeadingSpace();
UBYTE *StripOuterSpace();
SHORT CompareUpperStrings(s, t)
UBYTE *s, *t;
/* Compare s to t, making alphabet characters uppercase. Return value:
* s < t -1
* s == t 0
* s > t 1
*/
{
SHORT sc, tc;
FOREVER
{
sc = *s++;
if ((sc >= 'a') && (sc <= 'z')) sc = sc - 'a' + 'A';
tc = *t++;
if ((tc >= 'a') && (tc <= 'z')) tc = tc - 'a' + 'A';
if (sc < tc) return(-1);
if (sc > tc) return(1);
if (sc == '\0') return(0);
}
return(0);
}
VOID CopyString(tostring, fromstring)
UBYTE *tostring, *fromstring;
{
while (*tostring++ = *fromstring++) ;
}
VOID ConcatString(firststring, addstring)
UBYTE *firststring, *addstring;
{
SHORT length1;
length1 = StringLength(firststring);
firststring += length1;
CopyString(firststring, addstring);
}
UBYTE *FindSuffix(string, suffix)
UBYTE *string;
UBYTE *suffix;
{
SHORT stringlength, suffixlength;
if ( (stringlength = StringLength(string))
>= (suffixlength = StringLength(suffix)) )
{
if (StringsEqual(string + stringlength - suffixlength, suffix))
return (string + stringlength - suffixlength);
}
return(NULL);
}
SHORT IndexString(lookin, lookfor)
UBYTE *lookin, *lookfor;
/* This routines looks in the lookin string for the lookfor string.
* Returns the position of the lookfor string in lookin, or
* returns -1 if the lookfor string was not found.
*/
{
SHORT index;
UBYTE *workin, *workfor;
index = 0;
while (*lookin)
{
workin = lookin;
workfor = lookfor;
while ((*workfor) && (*workin) && (*workfor == *workin))
{
workfor++;
workin++;
}
if (*workfor == '\0') return(index);
lookin++;
index++;
}
return(-1);
}
SHORT StringLength(text)
UBYTE *text;
{
SHORT length;
length = 0;
while (*text++) length++;
return(length);
}
BOOL StringsEqual(text1, text2)
UBYTE *text1, *text2;
{
while (*text1 == *text2)
{
if (*text1 == '\0') return(TRUE);
text1++;
text2++;
}
return(FALSE);
}
UBYTE *StripLeadingSpace(text, space)
UBYTE *text, *space;
/* This routine "strips" the leading occurrences of the space string
* characters from the text string by finding the first character
* of the text string that is not contained in the space string.
* The return value is a pointer to the first non-space character in text.
* If text is the null string or if text consists of nothing
* but space characters, NULL is returned.
* If space is the NULL string, text is returned.
*/
{
if (space == NULL) return(text);
if (*space == '\0') return(text);
while (*text && (*text == *space)) text++;
if (*text) return(text);
return(NULL);
}
UBYTE *StripOuterSpace(text, space)
UBYTE *text, *space;
/* This routine "strips" the leading and trailing occurrences of the space
* string characters from the text string.
* The return value is a pointer to the first non-space character in text,
* and a null byte is stored after the text's last non-space character.
*/
{
UBYTE *workspace, *lastspace;
if (text == NULL) return(NULL);
if ((workspace = StripLeadingSpace(text, space)) == NULL)
{
*text = '\0';
return(text);
}
lastspace = workspace + StringLength(workspace) - 1;
while ((lastspace >= workspace) && (*lastspace == *space)) lastspace--;
*(lastspace + 1) = '\0';
return(workspace);
}